package com.ncst.backend.service;

import com.ncst.backend.domain.CheckRequest;

import java.util.List;

/**
 * 检查申请服务接口
 */
public interface CheckRequestService {
    
    /**
     * 根据ID查询检查申请
     */
    CheckRequest getById(Integer id);
    
    /**
     * 查询所有检查申请
     */
    List<CheckRequest> getAll();
    
    /**
     * 根据条件查询检查申请列表
     */
    List<CheckRequest> getByCondition(CheckRequest checkRequest);
    
    /**
     * 分页查询检查申请
     */
    List<CheckRequest> getByPage(Integer pageNum, Integer pageSize);
    
    /**
     * 统计检查申请总数
     */
    Long countAll();
    
    /**
     * 根据条件统计检查申请数量
     */
    Long countByCondition(CheckRequest checkRequest);
    
    /**
     * 新增检查申请
     */
    boolean save(CheckRequest checkRequest);
    
    /**
     * 批量新增检查申请
     */
    boolean saveBatch(List<CheckRequest> list);
    
    /**
     * 根据ID更新检查申请
     */
    boolean updateById(CheckRequest checkRequest);
    
    /**
     * 根据ID删除检查申请
     */
    boolean removeById(Integer id);
    
    /**
     * 批量删除检查申请
     */
    boolean removeByIds(List<Integer> ids);

    /**
     * 联表挂号（含患者姓名）按可选条件查询
     * @param patientName 患者姓名（模糊，可为空）
     * @param checkState 检查状态（精确，可为空）
     */
    List<CheckRequest> listWithRegister(String patientName, String checkState);

    /**
     * 开始检查：设置检查医生并将状态置为“检查中”
     * @param id 记录ID
     * @param employeeId 医生ID
     */
    boolean startCheck(Integer id, Integer employeeId);

    /**
     * 结果录入：查询检查中记录
     */
    List<CheckRequest> listForInput(String caseNumber, String realName);

    /**
     * 结果录入：提交结果
     */
    boolean submitResult(Integer id, Integer employeeId, String result);
}
